package util.estatisticas.metricas;

import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;

import util.Util;

public class Vazao {
	
	private EstimadorMedia estimadorMedia;
	
	private EstimadorVariancia estimadorVariancia;
	
	private long totalSaidasUsuarios;
	
	private double instanteInicio;
	
	public Vazao() {
		this.estimadorMedia = new EstimadorMedia();
		this.estimadorVariancia = new EstimadorVariancia();
		this.totalSaidasUsuarios = 0;
		this.instanteInicio = 0;
	}
	
	public void inicializaRodada(double instanteInicio) {
		this.totalSaidasUsuarios = 0;
		this.instanteInicio = instanteInicio;
	}
	
	public void saidaUsuario() {
		this.totalSaidasUsuarios++;
	}
	
	public void finalizaRodada(double instanteFim) {
		double duracaoRodada = instanteFim - this.instanteInicio;
		double vazao = this.totalSaidasUsuarios / duracaoRodada;
		
		estimadorMedia.atualiza(vazao);
		estimadorVariancia.atualiza(vazao);
	}
	
	public void escreveArquivo() {
		if (!Util.ARQUIVO_VAZAO.isEmpty()) {
			try {
				FileWriter file = new FileWriter(Util.ARQUIVO_VAZAO, true);
				BufferedWriter bufferedWriter = new BufferedWriter(file);
				
				bufferedWriter.write(this.estimadorMedia.getEstimador() + " ");
				bufferedWriter.write(this.estimadorVariancia.getEstimador() + " ");
				bufferedWriter.write(Util.N0 + "\n");
				bufferedWriter.close();
			}
			catch (FileNotFoundException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}
}

